package chixing.day12;

import java.util.Arrays;

/**
 * 容器：可动态扩容的数组
 */
public class MyContainer<E> {
    private Object[] defaultArray;
    private int size =0;  // 已有元素个数
    private final int DEFAULT_CAPACITY = 10;  // 容器默认的容量（大小）

    public MyContainer(){
        defaultArray = new Object[DEFAULT_CAPACITY];
    }


    /**
     * 添加新元素，默认添加在容器尾部
     * @param ele 新元素
     * @return  返回添加是否成功
     */
    public boolean add(E ele){
        if(size >=defaultArray.length)// 需要扩容
            defaultArray =  Arrays.copyOf(defaultArray,defaultArray.length << 1 + 1);

        defaultArray[size++] = ele;
        return true;
    }


    /**
     * 添加新元素到指定的位置上
     * @param ele 新元素
     * @param index 指定的位置,下标从0开始
     * @return 返回添加元素是否成功
     */
    public boolean add(E ele,int index){
        if(index <0 || index >size)
            throw  new IndexOutOfBoundsException("下标越界啦");


        if(size >=defaultArray.length) {// 需要扩容
            Object[] newArray = new Object[defaultArray.length << 1 +1];
            // index 将原数组 一份为二，分别复制到新数组中 (一定要画图，带具体的数字)
            System.arraycopy(defaultArray,0,newArray,0,index);
            System.arraycopy(defaultArray,index+1,newArray,index+1,size-index-1);
            defaultArray =  newArray;

        }else{   // 不需要扩容
            System.arraycopy(defaultArray,index,defaultArray,index+1,size-index);
        }
        defaultArray[index] = ele;  // 新元素放在 指定位置上
        size++;
        return true;
    }

    /**
     * 删除指定位置上的元素
     * @param index  指定的位置,下标从0开始
     * @return 返回删除元素是否成功
     *
     */
    public boolean remove(int index){
        if(index <0 || index >=size)
            throw new IndexOutOfBoundsException("下标越界啦");

        System.arraycopy(defaultArray,index+1,defaultArray,index,size-index);
        size--;
        return true;
    }


    public int size(){
        return this.size;
    }

    public void print(){
        for(int i =0;i<size;i++){
            System.out.println(defaultArray[i] );
        }
    }
}

